package com.fqgj.xjd.user.client;

import com.fqgj.common.api.Response;
import com.fqgj.xjd.user.client.request.KycQueryRequest;
import com.fqgj.xjd.user.client.request.UserKycPageQueryRO;
import com.fqgj.xjd.user.client.request.UserKycUpdateRequest;
import com.fqgj.xjd.user.client.response.*;

import java.util.List;

/**
 * 用户kyc信息服务(Know Your Customer)
 *
 * @author liuming
 * Created on 下午3:53 2018/8/17.
 */
public interface UserKycDocumentService {

    /**
     * 获取用户kyc信息
     */
    Response<List<UserKycDocumentInfo>> getByUserCode(String userCode);

    /**
     * 分页查询kyc信息
     * @param userKycPageQueryRO
     * @return
     */
    Response<List<UserKycDocumentInfo>> getListByPage(UserKycPageQueryRO userKycPageQueryRO);

    /**
     * 保存/更新用户kyc信息
     */
    Response saveUserKycInfo(UserKycDocumentInfo userKycDocumentInfo);

    /**
     * 初始化kyc信息(可更新 无实名认证功能)
     * @param userKycDocumentInfo
     * @return
     */
    Response initUserKycInfo(UserKycDocumentInfo userKycDocumentInfo);

    /**
     * 重传需要移除的信息
     *
     * @param userKycDocumentInfo
     * @return
     */
    Response removeUserKycInfo(UserKycDocumentInfo userKycDocumentInfo);

    /**
     * 通过ocr扫描获取passport正面信息
     */
    Response<OcrPassportFront> getPassportFrontOcrByUserCode(String userCode);

    /**
     * 通过ocr扫描获取passport背面信息
     */
    Response<OcrPassportBack> getPassportBackOcrByUserCode(String userCode);

    /**
     * 移除ocr扫描passport正面信息
     */
    Response removePassportFrontOcrInfo(String userCode);

    /**
     * 移除ocr扫描passport背面信息
     */
    Response removePassportBackOcrInfo(String userCode);

    /**
     * 通过ocr扫描获取voterid正面信息
     */
    Response<OcrVoteridFront> getVoteridFrontOcrByUserCode(String userCode);

    /**
     * 通过ocr扫描获取voterid背面信息
     */
    Response<OcrVoteridBack> getVoteridBackOcrByUserCode(String userCode);

    /**
     * 移除ocr扫描voterid正面信息
     */
    Response removeVoteridFrontOcrInfo(String userCode);

    /**
     * 移除ocr扫描voterid背面信息
     */
    Response removeVoteridBackOcrInfo(String userCode);

    /**
     * 获取没有经过人脸识别的用户kyc列表
     */
    Response<List<UserKycDocumentInfo>> getNoFaceRecognitionKycList(Integer limitSearch);

    /**
     * 获取没有经过识别的家庭照
     */
    Response<List<UserKycDocumentInfo>> selectNoScanSelfieList(Integer limitSearch);

    /**
     * 获取用户voterId爬虫校验返回结果
     */
    Response<UserKycVoterAuthResult> getKycVoterAuthResultByUserCode(String userCode);

    /**
     * 获取用户dl爬虫校验返回结果
     */
    Response<UserKycDriverLicenseAuthResult> getKycDriverLicenseResultByUserCode(String userCode);

    /**
     * 查询三方服务调用次数
     */
    Response<UserKycStatistics> getUserKycStatistics(KycQueryRequest request);

    /**
     * 根据userCode更新数据
     * @param request
     * @return
     */
    Response updateUserKycDocumentInfo(UserKycUpdateRequest request);
}
